package com.meeting.y.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created with IntelliJ IDEA.
 * User: shoko (fbjia.com)
 * Date: 13-11-14
 * Time: 上午10:18
 * To change this template use File | Settings | File Templates.
 */
public class ValidateUtil {

    /**
     * 用分隔符替换字符串的的空格,以及在字符串的首尾加上分隔符
     *
     * @param str
     * @param delim
     * @return
     */
    public static String replaceBackSpaceWithDelim(String str, String delim) {
        if (StringUtil.isStrEmpty(str))
            return GlobalConstant.STR_EMPTY;
        String regex = "(^\\s*)|(\\s+)|(\\s*$)";
        Pattern pt = Pattern.compile(regex);
        Matcher mc = pt.matcher(str);
        return mc.replaceAll(delim);
    }

    /**
     * 验证输入的正整数格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean positiveIntegerValidate(String s) {
        String strPattern = "^[1-9][0-9]*$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的电话格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean phoneValidate(String s) {
        String strPattern = "^[+]{0,1}(\\d){1,3}[ ]?([-]?((\\d)|[ ]){1,12})+$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的手机格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean mobileValidate(String s) {
        String strPattern = "^((\\(\\d{2,3}\\))|(\\d{3}\\-))?13\\d{9}$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的日期格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean dateValidate(String s) {
        String strPattern = "^\\d{4}-\\d{1,2}-\\d{1,2}$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的邮箱格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean emailValidate(String s) {
        String strPattern = "^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的身份证格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean idCardValidate(String s) {
        String strPattern = "^\\d{15}(\\d{2}[A-Za-z0-9])?$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的邮编格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean postcodeValidate(String s) {
        String strPattern = "^[1-9]{1}(\\d+){5}$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的IP格式是否正确（，多个IP以;相隔）
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean ipsFormatValidate(String s) {
        String strPattern = "^(\\d{1}|[1-9]\\d{1}|1\\d{2}|2[0-4]\\d{1}|25[0-5]).(\\d{1}|[1-9]\\d{1}|1\\d{2}|2[0-4]\\d{1}|25[0-5]).(\\d{1}|[1-9]\\d{1}|1\\d{2}|2[0-4]\\d{1}|25[0-5]).(\\d{1}|[1-9]\\d{1}|1\\d{2}|2[0-4]\\d{1}|25[0-5])$";
        if (s.indexOf(";") == -1)//单个IP
            return validate(s, strPattern);
        String[] ips = s.split(";");
        for (String ip : ips) {
            if (!validate(ip, strPattern))
                return Boolean.FALSE;
        }
        return Boolean.TRUE;
    }

    /**
     * 验证输入的中文格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean chinsesValidate(String s) {
        String strPattern = "^[\\u0391-\\uFFE5]+$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的中文和英文字母或数字格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean chinsesEnValidate(String s) {
        String strPattern = "^[A-Za-z0-9_\u0391-\uFFE5]+$";
        return validate(s, strPattern);
    }

    /**
     * 客户、渠道、伙伴及其相应联系人的名称验证。只能输入数字、字母、汉字和几个符号(:)
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean sixTargetNameValidate(String s) {
        String strPattern = "^[A-Za-z0-9_\u0391-\uFFE5(:)]+$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的英文格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean englishValidate(String s) {
        String strPattern = "^[A-Za-z]+$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的数字格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean numberValidate(String s) {
        String strPattern = "^[0-9]+$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的数字格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean numberValidate1(String s) {
        String strPattern = "^[1-9][0-9]*$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的整数格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean integerValidate(String s) {
        String strPattern = "^[-\\+]?\\d+$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的double格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean doubleValidate(String s) {
        String strPattern = "^[-\\+]?\\d+(\\.\\d+)?$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的字母或数字格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean numberOrLetterValidate(String s) {
        String strPattern = "^[0-9a-zA-Z]+$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的销售机构代码格式是否正确
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean distributorcodeValidate(String s) {
        String strPattern = "^[0-9a-zA-Z]{3}$";
        return validate(s, strPattern);
    }

    /**
     * 验证输入的浮点数是否合法
     *
     * @param s 待验证的字符串
     * @return 是否合法 true合法
     */
    public static boolean formatValidate(String s, String flag) {
        String strPattern = null;
        if (flag.equals("gift")) {
            strPattern = "^(\\d){1,8}(\\.\\d{1,2})?$";
        } else if (flag.equals("activityTarget")) {
            strPattern = "^(\\d){1,3}(\\.\\d{1,2})?$";
        } else if (flag.equals("product")) {
            strPattern = "^(\\d){1,3}(\\.\\d{1,4})?$";
        } else if (flag.equals("prm") || flag.equals("activityTargetProp")) {
            strPattern = "^(\\d){1,10}(\\.\\d{1,2})?$";
        } else if (flag.equals("activity") || flag.equals("callReport")
                || flag.equals("project") || flag.equals("proSale")
                || flag.equals("summary") || flag.equals("saleTarget")) {
            strPattern = "^(\\d){1,14}(\\.\\d{1,2})?$";
        } else if (flag.equals("invdur") || flag.equals("invret") || flag.equals("invbat")) {
            strPattern = "^(\\d){1,3}(\\.\\d{1,2})?$";
        }
        return validate(s, strPattern);
    }

    /**
     * 正则验证
     *
     * @param s          待验证的字符串
     * @param strPattern 格式
     * @return 符合格式则返回true，反之返回false
     */
    public static boolean validate(String s, String strPattern) {
        if (s == null)
            return Boolean.FALSE;
        Pattern pattern = Pattern.compile(strPattern);
        Matcher mat = pattern.matcher(s);
        if (!mat.find())
            return Boolean.FALSE;
        return Boolean.TRUE;
    }
}
